{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# The Mesh: Where do things live?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"images/FiniteVolume.png\" width=70% align=\"center\">\n",
    "<h4 align=\"center\">Figure 3. Anatomy of a finite volume cell.</h4>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To bring our continuous equations into the computer, we need to discretize the earth and represent it using a finite(!) set of numbers. In this tutorial we will explain the discretization in 2D and generalize to 3D in the notebooks. A 2D (or 3D!) mesh is used to divide up space, and we can represent functions (fields, parameters, etc.) on this mesh at a few discrete places: the nodes, edges, faces, or cell centers. For consistency between 2D and 3D we refer to faces having area and cells having volume, regardless of their dimensionality. Nodes and cell centers naturally hold scalar quantities while edges and faces have implied directionality and therefore naturally describe vectors. The conductivity, $\\sigma$, changes as a function of space, and is likely to have discontinuities (e.g. if we cross a geologic boundary). As such, we will represent the conductivity as a constant over each cell, and discretize it at the center of the cell. The electrical current density, $\\vec{j}$, will be continuous across conductivity interfaces, and therefore, we will represent it on the faces of each cell. Remember that $\\vec{j}$ is a vector; the direction of it is implied by the mesh definition (i.e. in $x$, $y$ or $z$), so we can store the array $\\bf{j}$ as *scalars* that live on the face and inherit the face's normal. When $\\vec{j}$ is defined on the faces of a cell the potential, $\\vec{\\phi}$, will be put on the cell centers (since $\\vec{j}$ is related to $\\phi$ through spatial derivatives, it allows us to approximate centered derivatives leading to a staggered, second-order discretization). "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Implementation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1063cae90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import numpy as np\n",
    "from SimPEG import Mesh, Utils  \n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.set_cmap(plt.get_cmap('viridis')) # use a nice colormap!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Create a Mesh\n",
    "\n",
    "A mesh is used to divide up space, here we will use [SimPEG's mesh class](http://docs.simpeg.xyz/content/api_core/api_Mesh.html) to define a simple tensor mesh. By \"Tensor Mesh\" we mean that the mesh can be completely defined by the tensor products of vectors in each dimension; for a 2D mesh, we require one vector describing the cell widths in the x-direction and another describing the cell widths in the y-direction. \n",
    "\n",
    "Here, we define and plot a simple 2D mesh using SimPEG's mesh class. The cell centers boundaries are shown in blue, cell centers as red dots and cell faces as green arrows (pointing in the positive x, y - directions). Cell nodes are plotted as blue squares. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAEPCAYAAACneLThAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAH0pJREFUeJzt3X+M3PV95/Hne0MI8Q/iU1KFGBRs9urLxajhEtM9K8Yz\nVq5teoVGtZ27RN4aQlX+uQS0cdDhKOvdtdUjKUQl1VU6WU0xoLSpvBAwKLWCFL57sv/YmCRcFgPn\n6/5wExZQK8U5G5dLyrzvj5lZ7zhrZpz5fr6f73z8ekgjf7/jsb/vz+ezn/fsvGf2vebuiIhImvpi\nByAiIuEoyYuIJExJXkQkYUryIiIJU5IXEUmYkryISMKCJnkzW2dmPzSzHzT+/JmZ3RnymiIico4V\n9Tl5M+sDfgIMuPuPC7moiMglrshyzX8AppXgRUSKU2SS/8/A3xR4PRGRS14h5RozezswD3zQ3f8x\n+AVFRASAywq6zu8C379QgjczNdAREblI7m7tHlNUuebTtC3VOOBUKiO4e0/farUaA9sHYASoACMw\nsH2AWq0WPbY8bpXKyMJ61QcZdu1a5nM0/HxqfL19S3n/ta5dZ4IneTNbRv1N18dCX6ssHn3yUaZW\nToEBpwCDqRVTPPZUilMwF/wKLfMJBc/nXPArpD6+ol1a+6+94OUadz8L/Fq7x1UqowCsW3dF4IjC\nO/rsUTa8uQGbNV468xIfmP0A7s6RY0fYdsu22OF1rb5GowBMTIRfu8Xz2RRyPjW+3pby/jt/7TpR\n2Ofk3zIIMy9DHCFkWUa1Wo0dRjBmGe7V2GEEo/H1tpT3n5nhHdTkleSlK2aQ8tJpfFJWnSZ59a4J\nLMuy2CEElsUOILAsdgCBZbEDCCr9/deekryISMJUrpGupP5yX+OTslK5RkRElORDS78mmMUOILAs\ndgCBZbEDCCr9/deekryISMJUk5eupF7T1fikrFSTFxERJfnQ0q8JZrEDCCyLHUBgWewAgkp//7Wn\nJC8ikjDV5KUrqdd0NT4pK9XkRUREST609GuCWewAAstiBxBYFjuAoNLff+0pyYuIJEw1eelK6jVd\njU/KSjV5ERFRkg8t/ZpgFjuAwLLYAQSWxQ4gqPT3X3tK8iIiCVNNXrqSek1X45OyUk1eRESU5ENL\nvyaYxQ4gsCx2AIFlsQMIKv39117wJG9m7zKzg2b2opkdN7OB0NcUEZG6Ir6T/xrwbXf/t8CHgBcL\nuGZ0J2dnGRsc5JmxMcYGBzk5Oxs7pNwM7Rli/NA49fdRqoVcszmfI1u2BJ9Pja/3pbr/WteuQ+4e\n7AZcCUx38Div1WqeirmZGd/V3+9n6u9p+RnwXf39PjczEzu0XGzeudmX3bbMB7YNOHjwtSt6PjW+\n3pby/mtdO9w7yMOhv5NfC/yTmT1oZj8ws/1m9s6lHrjxkxsv/hmqpA4MDzM2Pc1y6hXP5cDY9DQH\nhofjBpYTM+PsmrNMXj8JZMHXbvF8Qvj51Ph6W8r7r3XtOhM6yV8GfBj4C3f/MHAWuGepB07+/SQ7\nPreDm7bcxAMPPNDyhkmWZT11PvP88xxbNLYMOAbU5udLEV+356dePQWzQOPDW5MrJtk5vJPde3cH\nuV7R86nxlevrrezzWdR5lmXMPTcH3wIep3OdfLv/q96A9wIzi843AU8u8Tgf2D7g44fGk3jpOLpj\nx8JLRV/0knF0x47YoeWicmvFGcUZwcGDr13R86nx9baU91/r2nVWrgma5L2ewCeAdY3jEeArSzwm\nmS8w97Rrgu6L6oLbE69Za3w9KeX917p2nSX54D/xamYfAv4SeDswA3zG3X923mM8dBxFOzk7y4Hh\nYWaOH+e69eu5bd8+rl27NnZYuRjaM8SmGzex9eat9PVN4F4Nfs3mfNbm5+lbvTrofGp8vS/V/de6\ndn14Bz/xqrYGgWVZRrVajR1GMGZZkkmiSePrbSnvv07bGijJS1dS732i8UlZqXeNiIgoyYe2+KNQ\nacpiBxBYFjuAwLLYAQSV/v5rT0leRCRhqslLV1Kv6Wp8UlaqyYuIiJJ8aOnXBLPYAQSWxQ4gsCx2\nAEGlv//aU5IXEUmYavLSldRruhqflJVq8iIioiQfWvo1wSx2AIFlsQMILIsdQFDp77/2lORFRBKm\nmrx0JfWarsYnZaWavIiIKMmHln5NMIsdQGBZ7AACy2IHEFT6+689JXkRkYSpJi9dSb2mq/FJWakm\nLyIiSvKhpV8TzGIHEFgWO4DAstgBBJX+/mtPSV5EJGGqyUtXUq/panxSVqrJi4iIknxo6dcEs9gB\nBJbFDiCwLHYAQaW//9q7LPQFzGwO+BlQA37h7r8Z+poiIlIXPMlTT+5Vd//pWz2oWh0FYN26K9i/\n/54CwgrP3Tk8cZhKpYJZ29JZz7jjji9z4sQbjbPRwtbO3dm9dzf37rk36HxqfGlIcf+1rl2H3D3o\nDZgF3t3mMV5/+8e9UhnxVBx84qCv3LzSxw+Nxw4lV5XKyMJ6Lb6FXrui5lPjS0OK+6917XDvIAcX\nUZN34GkzO2Zmf1zA9UrB3bn/kfs5vfY09z18X/PJLEFZIVdZmM8tRc9nVshVUh9f0S6d/dde8I9Q\nmtn73P0VM/s14Gngs+5+5LzHONwKrGncswq4Aag2zrPGn7143jwuSzx5nzePyxJP3ufN47LEk/d5\n87gs8eR93jwuSzzdnDeP5xrHD3X0Ecrg5ZrFN2AE+PwS9yf1krFWq/nA9gFnBGcUZwQf2D7gtVot\ndmi5KPrlftHzqfH1tpT3X+nKNWa2zMxWNI6XA78NPB/ymmXw6JOPMrVyCprPsQZTK6Z47KnHosbV\nq1Kfz9THVzTNZ6vQn655L/CtejmGy4BvuPt3lnpgpTIK1N/h73VHnz3Khjc3YLPGqVdPseqqVbg7\nR44dYdst22KH17X6Go0CMDFRpVLJFt2fv8Xz2RRyPjW+3pby/mtdu87+jdoaBJZlGdVqNXYYwZhl\nuFdjhxGMxtfbUt5/nbY1UJKXrqTe+0Tjk7JS7xoREVGSDy393hlZ7AACy2IHEFgWO4Cg0t9/7SnJ\ni4gkTDV56UrqNV2NT8pKNXkREVGSDy39mmAWO4DAstgBBJbFDiCo9Pdfe0ryIiIJU5IP5OTsLGOD\ngzwzNsbY4CAnZ2djh5SboT1DjB8ab/QdqhZyzeZ8jmzZEnw+Nb7el+r+a127DnXS4Cb0DUiieVDT\n3MyM7+rv9zONTkJnwHf19/vczEzs0HKxeedmX3bbMh/YNuDgwdeu6PnU+Hpbyvuvde1K0KDsYmz8\n5MaLf4YqqQPDw4xNT7OcesVzOTA2Pc2B4eG4geXEzDi75iyT108CWfC1WzyfEH4+Nb7elvL+a127\nzpQmyU9eP8ntX72d3Xt3xw6la7WXX17YsE3Lgdr8fIxwwml8eCv02kWbT42vJ10S++8ifpthEb/j\ntSMDxwe4+wt3s/XmrbFD6Vrf1VfzOvUvrGrjvteBvtWro8UUhANUg6/d4vlsKmQ+Nb6edEnsv4t5\n0dVJTSf0DdXke8pCXXB74jVrja8npbz/Wteus5q8fuI1kJOzsxwYHmbm+HGuW7+e2/bt49q1a2OH\nlYuhPUNsunETW2/eSl/fRCGtapvzWZufp2/16qDzqfH1vlT3X+va9anVcBmk3M8a0u9HrvH1tpT3\nn/rJSyFS732i8UlZqXeNiIgoyYeWfu+MLHYAgWWxAwgsix1AUOnvv/aU5EVEEqaavHQl9Zquxidl\npZq8iIgoyYeWfk0wix1AYFnsAALLYgcQVPr7r71CkryZ9ZnZD8zsUBHXExGRuqJ619wFvABceaEH\nVKujAKxbdwX7999TTFSBuTuHJw5TqVQwu4iOQiV3xx1f5sSJNxpno4Wtnbuze+9u7t1zb9D51PjS\nkOL+a127DnXS+6CbG3AN8DT1XkGHLvAYb7SZ8EplJJ8mDyVw8ImDvnLzSh8/NB47lFxVKiML67X4\nFnrtippPjS8NKe6/1rXrrHdNEeWaPwPu5uL6pvU8d+f+R+7n9NrT3Pfwfcn06v5lWSFXWZjPLUXP\nZ1bIVVIfX9Eunf3XXtCPUJrZ7wG/6+6fNbMqsMvdb1nicQ63Amsa96wCbuBco9Cs8WcvnjePyxJP\n3ufN47LEk/d587gs8eR93jwuSzx5nzePyxJPN+fN47nG8UMdfYQydKnmvwH/AMwArwBngIeXeFxS\nLxlrtVq9FegIzijOCD6wfSCZlq5Fv9wvej41vt6W8v4rXbnG3b/o7u939+uATwHfdfedIa9ZBo8+\n+ShTK6fO/fYWg6kVUzz21GNR4+pVqc9n6uMrmuazVWl+M1SlMgrU3+HvdUefPcqGNzdgs8apV0+x\n6qpVuDtHjh1h2y3bYofXtfoajQIwMVGlUskW3Z+/xfPZFHI+Nb7elvL+a127zv6N2hoElnI/a0i/\nH7nG19tS3n/qJy+FSL33icYnZaXeNSIioiQfWvq9M7LYAQSWxQ4gsCx2AEGlv//aU5IXEUmYavLS\nldRruhqflJVq8iIioiQfWvo1wSx2AIFlsQMILIsdQFDp77/2lORFRBL2lknezK40s/4l7v+NcCGl\n4eTsLGODgzwzNsbY4CAnZ2djh5SboT1DjB8ab/QdqhZyzeZ8jmzZEnw+Nb7el+r+a127Dl2oqQ3w\nn4B54DngOHDjor/7QSeNcTq9AUk0D2qam5nxXf39fqbRSegM+K7+fp+bmYkdWi4279zsy25b5gPb\nBhw8+NoVPZ8aX29Lef+1rl33Dcq+CHzE3W8APgM8YmZ/0Pi73H/NysZPbrz4Z6iSOjA8zNj0NMup\nVzyXA2PT0xwYHo4bWE7MjLNrzjJ5/SSQBV+7xfMJ4edT4+ttKe+/1rXrzFsl+be5+ysA7v49YAvw\nJTO7kwC/AGTy+klu/+rt7N67O+//unC1l19e2LBNy4Ha/HyMcMJpPNWHXrto86nx9aRLYv9dxLfZ\nb9WF8rSZ9bv7NIC7v9L4xR+PA+u7iW8pA8cHuPsLd7P15q15/9eF67v6al6n/oVVbdz3OtC3enW0\nmIJwgGrwtVs8n02FzKfG15Muif13Md9mX6iOA3wI+HXgg+fd/3bgDzupBXV6QzX5nrJQF9yeeM1a\n4+tJKe+/1rXrrCbf9idezex54BHgT4ErGn9ucPeNF/nc81bX8HZx9JqTs7McGB5m5vhxrlu/ntv2\n7ePatWtjh5WLoT1DbLpxE1tv3kpf30QhrWqb81mbn6dv9eqg86nx9b5U91/r2vXl02rYzJYDXwE+\nAqwEvgF8xd1reQTduEZySb4p5X7WkH4/co2vt6W8/3LrJ29mlwN/AvwWsAL4krt/M5coz10j2SSf\nutR7n2h8UlZ59q45BvwzcCNwE/BpMzvYZXwiIlKATpL8H7n7Hnf/hbu/4u6fAA6FDiwV6ffOyGIH\nEFgWO4DAstgBBJX+/muvbZJ392eXuO+RMOGIiEie1E9eupJ6TVfjk7JSP3kREVGSDy39mmAWO4DA\nstgBBJbFDiCo9Pdfe2/V1qBrZvYO4H8ClzeuNe7uYyGvKSIi5wRN8u7+/8xsi7ufNbO3AUfN7O+8\n3vCsRbU6CsC6dVewf/89IcMqjLtzeOIwlUoFs9wbd0Zzxx1f5sSJNxpno4Wtnbuze+9u7t1zb9D5\n1PjSkOL+a127DnXS+yCPG7AMeJZFfekX/Z032kx4pTLyq7Z1KJ2DTxz0lZtX+vih8dih5KpSGVlY\nr8W30GtX1HxqfGlIcf+1rl33/eRzYWZ9ZvZD4FXgaXc/FvqaZeDu3P/I/Zxee5r7Hr4vmV7dvywr\n5CoL87ml6PnMCrlK6uMr2qWz/9or7COUZnYl9TbFn3X3F877O4dbgTWNe1YBN3CuUWjW+LMXz5vH\nZYkn7/PmcVniyfu8eVyWePI+bx6XJZ68z5vHZYmnm/Pm8Vzj+KGOPkJZWLmm8WQyDHx+ifuTeslY\nq9XqrUBHcEZxRvCB7QPJtHQt+uV+0fOp8fW2lPdf6co1ZvYeM3tX4/id1JucvRTymmXw6JOPMrVy\n6txvbzGYWjHFY089FjWuXpX6fKY+vqJpPlsF/XQN8D7gITPro/6Z/L91928v9cBKZRSov8Pf644+\ne5QNb27AZo1Tr55i1VWrcHeOHDvCtlu2xQ6va/U1GgVgYqJKpZItuj9/i+ezKeR8any9LeX917p2\nnf0btTUILOV+1pB+P3KNr7elvP9y6ydfhJSTfOpS732i8UlZqXeNiIgoyYeWfu+MLHYAgWWxAwgs\nix1AUOnvv/aU5EVEEqaavHQl9ZquxidlpZq8iIgoyYeWfk0wix1AYFnsAALLYgcQVPr7rz0leRGR\nhCnJB3JydpaxwUGeGRtjbHCQk7OzsUPKzdCeIcYPjTf6DlULuWZzPke2bAk+nxpf70t1/7WuXYc6\naXAT+gYk0TyoaW5mxnf19/uZRiehM+C7+vt9bmYmdmi52Lxzsy+7bZkPbBtw8OBrV/R8any9LeX9\n17p2JWhQdjE2fnLjxT9DldSB4WHGpqdZTr3iuRwYm57mwPBw3MByYmacXXOWyesngSz42i2eTwg/\nnxpfb0t5/7WuXWdKk+Qnr5/k9q/ezu69u2OH0rXayy8vbNim5UBtfj5GOOE0PrwVeu2izafG15Mu\nif13Eb/NMHQXyo4NHB/g7i/czdabt8YOpWt9V1/N69S/sKqN+14H+lavjhZTEA5QDb52i+ezqZD5\n1Ph60iWx/y7mRVcnNZ3QN1ST7ykLdcHtidesNb6elPL+a127zmry+onXQE7OznJgeJiZ48e5bv16\nbtu3j2vXro0dVi6G9gyx6cZNbL15K319E4W0qm3OZ21+nr7Vq4POp8bX+1Ldf61r16dWw2WQcj9r\nSL8fucbX21Lef+onL4VIvfeJxidlpd41IiKiJB9a+r0zstgBBJbFDiCwLHYAQaW//9pTkhcRSZhq\n8tKV1Gu6Gp+UlWryIiKiJB9a+jXBLHYAgWWxAwgsix1AUOnvv/aCJnkzu8bMvmtmx81syszuDHk9\nERFpFbp3zb8An3f358xsBfB9M/uOu790/gOr1VEA1q27gv377wkcVjHcncMTh6lUKphdREehkrvj\nji9z4sQbjbPRwtbO3dm9dzf37rk36HxqfGlIcf+1rl2HOul9kNcNeBz42BL3e6PNhFcqI903eCiJ\ng08c9JWbV/r4ofHYoeSqUhlZWK/Ft9BrV9R8anxpSHH/ta5dZ71rCqvJm9ka4Aag80bIPczduf+R\n+zm99jT3PXxf88ksQVkhV1mYzy1Fz2dWyFVSH1/RLp39114hH6FslGoyYJ+7P7HE3zvcCqxp3LOK\n+vNBtXGeNf7sxfPmcVniyfu8eVyWePI+bx6XJZ68z5vHZYkn7/PmcVni6ea8eTzXOH6oo49QFlGi\nuQw4DNz1Fo9J6iVjrVartwIdwRnFGcEHtg8k09K16Jf7Rc+nxtfbUt5/ZS3X/BXwgrt/rYBrlcKj\nTz7K1Mqpc7+9xWBqxRSPPfVY1Lh6Verzmfr4iqb5bBX00zVm9lFgBzBlZj+k/vtMvujuh89/bKUy\nCtTf4e91R589yoY3N2CzxqlXT7HqqlW4O0eOHWHbLdtih9e1+hqNAjAxUaVSyRbdn7/F89kUcj41\nvt6W8v5rXbvO/o3aGgSWcj9rSL8fucbX21Lef+onL4VIvfeJxidlpd41IiKiJB9a+r0zstgBBJbF\nDiCwLHYAQaW//9pTkhcRSZhq8tKV1Gu6Gp+UlWryIiKiJB9a+jXBLHYAgWWxAwgsix1AUOnvv/aU\n5EVEEqaavHQl9ZquxidlpZq8iIgoyYeWfk0wix1AYFnsAALLYgcQVPr7rz0leRGRhKkmL11Jvaar\n8UlZqSYvIiJK8qGlXxPMYgcQWBY7gMCy2AEElf7+a09JXkQkYarJS1dSr+lqfFJWqsmLiIiSfGjp\n1wSz2AEElsUOILAsdgBBpb//2lOSFxFJmGry0pXUa7oan5SVavIiIqIkH1r6NcEsdgCBZbEDCCyL\nHUBQ6e+/9oImeTP7upm9ZmY/CnkdERFZWujv5B8EfifwNUrp5OwsY4ODPDM2xtjgICdnZ2OHlJuh\nPUOMHxqn/j5KtZBrNudzZMuW4POp8fW+VPdf69p1yN2D3oBrgR+1eYzXajVPxdzMjO/q7/cz9fe0\n/Az4rv5+n5uZiR1aLjbv3OzLblvmA9sGHDz42hU9nxpfb0t5/7WuHe4d5ODS1OQ3fnLjxT9DldSB\n4WHGpqdZTr3iuRwYm57mwPBw3MByYmacXXOWyesngSz42i2eTwg/nxpfb0t5/7WuXWdKk+Qn/36S\nHZ/bwU1bbuKBBx5oecMky7KeOp95/nmOLRpbBhwDavPzpYiv2/NTr56CWaDx4a3JFZPsHN7J7r27\ng1yv6PnU+Mr19Vb2+SzqPMsy5p6bg28Bj9O5Tr7d7+ZGh+Wage0DPn5oPImXjqM7diy8VPRFLxlH\nd+yIHVouKrdWnFGcERw8+NoVPZ8aX29Lef+1rl1n5ZoikvwaYKrNY5L5AnNPuybovqguuD3xmrXG\n15NS3n+ta9dZkg/6E69m9tfU375/N/AaMOLuDy7xOA8ZRwwnZ2c5MDzMzPHjXLd+Pbft28e1a9fG\nDisXQ3uG2HTjJrbevJW+vgncq8Gv2ZzP2vw8fatXB51Pja/3pbr/WteuD+/gJ17V1iCwLMuoVqux\nwwjGLEsySTRpfL0t5f3XaVsDJXnpSuq9TzQ+KSv1rhERESX50BZ/FCpNWewAAstiBxBYFjuAoNLf\nf+0pyYuIJEw1eelK6jVdjU/KSjV5ERFRkg8t/ZpgFjuAwLLYAQSWxQ4gqPT3X3tK8iIiCVNNXrqS\nek1X45OyUk1eRESU5ENLvyaYxQ4gsCx2AIFlsQMIKv39156SvIhIwlSTl66kXtPV+KSsVJMXEREl\n+dDSrwlmsQMILIsdQGBZ7ACCSn//tackLyKSMNXkpSup13Q1Pikr1eRFRERJPrT0a4JZ7AACy2IH\nEFgWO4Cg0t9/7SnJi4gkTDV56UrqNV2NT8pKNXkREQmf5M3s42b2kpmdMLP/Gvp6ZZN+TTCLHUBg\nWewAAstiBxBU+vuvvaBJ3sz6gP8O/A6wHvi0mX0g5DXL5rnnnosdQmAaX29Le3zp77/2Lgv8//8m\n8H/c/SSAmX0T+ATw0vkPrFZHAVi37gr2778ncFjFcHfGHx/nrrvuwqxt6axn3HHHlzlx4o2F86LW\nzt3ZvXc39+65N+h8anxpSHH/nb92HXH3YDdgG7B/0fkg8OdLPM7rb/+4VyojnoqDTxz0y99/uY8f\nGo8dSq4qlZGF9YKRwtbu4BMHfeXmlcHnU+NLQ4r7r3XtcO8gD+uN10DcnfsfuZ+f/6ufc9/D9zWf\nzBI0V8hVmvN5esvpgudzrpCrpD6+ol06+6+9oB+hNLN/D4y6+8cb5/dQf/b5ynmPu3RXQETkV+Qd\nfIQydJJ/G/C/gY8BrwDfAz7t7i8Gu6iIiCwI+saru79pZp8FvkP9kzxfV4IXESlOKX7iVUREwoj6\nxmvKPyhlZl83s9fM7EexYwnBzK4xs++a2XEzmzKzO2PHlCcze4eZTZrZDxvjG4kdU97MrM/MfmBm\nh2LHkjczmzOz/9VYv+/FjidvZvYuMztoZi829uDABR8b6zv5xg9KnaBer58HjgGfcvdf+gx9LzKz\nTcAZ4GF3/43Y8eTNzK4CrnL358xsBfB94BOprB+AmS1z97ON95aOAne6ezIJw8yGgI8AV7r778eO\nJ09mNgN8xN1/GjuWEMzsADDh7g+a2WXAMnf/v0s9NuZ38gs/KOXuvwCaPyiVBHc/AiT5BQbg7q+6\n+3ON4zPAi8DVcaPKl7ufbRy+g/r7V8nUNs3sGuA/An8ZO5ZAjER7c5nZlcBN7v4ggLv/y4USPMSd\nhKuBHy86/wmJJYlLhZmtAW4AJuNGkq9GOeOHwKvA0+5+LHZMOfoz4G4SeuI6jwNPm9kxM/vj2MHk\nbC3wT2b2YKPctt/M3nmhByf5TCfFaZRqxoG7Gt/RJ8Pda+7+74BrgAEz+2DsmPJgZr8HvNZ4JWaN\nW2o+6u4fpv5q5b80yqepuAz4MPAXjTGeBS7YjyJmkn8ZeP+i82sa90mPaNQCx4FH3P2J2PGE0ngp\n/Azw8dix5OSjwO836tZ/A2wxs4cjx5Qrd3+l8ec/At+iXh5OxU+AH7v7s43zcepJf0kxk/wx4F+b\n2bVmdjnwKSC1d/lT/S6p6a+AF9z9a7EDyZuZvcfM3tU4fifwWyzRWK8XufsX3f397n4d9X33XXff\nGTuuvJjZssYrTMxsOfDbwPNxo8qPu78G/NjM1jXu+hjwwoUeH7oL5QWl/oNSZvbXQBV4t5n9AzDS\nfKMkBWb2UWAHMNWoWzvwRXc/HDey3LwPeKjxKbA+4G/d/duRY5LOvBf4VqNdymXAN9z9O5Fjytud\nwDfM7O3ADPCZCz1QPwwlIpIwvfEqIpIwJXkRkYQpyYuIJExJXkQkYUryIiIJU5IXEUmYkrzIWzCz\nvzOzn6bYjlcuDUryIm/tT4HB2EGI/KqU5EUAM9vQ+CUTl5vZcjN73sw+6O7PUP+9ACI9KVpbA5Ey\ncfdnzewJ4E+Ad1JvunbBfiAivUJJXuScfdQb5/0z8LnIsYjkQuUakXPeA6wAVgJXRI5FJBdK8iLn\n/A/gS8A3qL/h2pR6y2hJmMo1IoCZ/SHwc3f/ZqO98FEzqwJ7gX8DrGi0jP4jd386YqgiF0WthkVE\nEqZyjYhIwpTkRUQSpiQvIpIwJXkRkYQpyYuIJExJXkQkYUryIiIJU5IXEUnY/wf01vtRmAaRnAAA\nAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10d7e9f90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot a simple tensor mesh\n",
    "hx = np.r_[2., 1., 1., 2.]  # cell widths in the x-direction\n",
    "hy = np.r_[2., 1., 1., 1., 2.]  # cell widths in the y-direction \n",
    "mesh2D = Mesh.TensorMesh([hx,hy])  # construct a simple SimPEG mesh\n",
    "mesh2D.plotGrid(nodes=True, faces=True, centers=True)  # plot it!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADtCAYAAAAcNaZ2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXeYVPXZ/j+nTNvZBogK0oSlswsYUYwtGrsRNZrEkvi+\niW/UXxKNxq4YwQpWELtYEo1GTQwYCxpbNAoKoruUXWmCUUFF2Da7U075/XH2O3um7pQzW3Du69pL\nnJ39njNzzrnPc+7nee5HMk2TIooooogiugdyT+9AEUUUUcR3CUXSLaKIIoroRhRJt4giiiiiG1Ek\n3SKKKKKIbkSRdIsooogiuhFF0i2iiCKK6EaoXfy+WE9WRBFFFJE9pFS/KEa6RRRRRBHdiCLpFlFE\nEUV0I4qkW0QRRRTRjSiSbhFFFFFEN6JIukUUUUQR3Ygi6RZRRBFFdCOKpFtEEUUU0Y0okm4RRRRR\nRDeiSLpFFFFEEd2IIukWUUQRRXQjiqRbRBFFFNGNKJJuEUUUUUQ3oki6ReQNwzDQNI3ivL0iiuga\nXbmMFVFEUpimiWmaRCIRwuEwmqYhSZaxkqIouFwuFEVBlmVkWY7+rogivusokm4RWcFOtoFAgIsu\nWsCmTZ1RrmEYSJJEVZWb+fN/H/07WZZRFCX6UyTjIr6rKJJuERnBTraGYURfW78+xNKlNyX5i6sB\ni2wFNE0jEonEvKtIxkV811Ak3SLSwjTNqGYroljTNAmFQoTD4ZR/FwyW0d4eBEwkSYqSqSBWO6kK\nicL+mniPqqqoqlok4yJ2GUhdJD+KmZHvKJKRrWEYBINBwuEwbreblhY49NDlbNlydMLfu1wtlJSU\nMm6czrhxOmPHaowZozF2bIQBAzTAjBKp/UeQqmmaBINBFEVBVTtjg2JkXEQfQcoTshjpFhED0zTR\ndT1ajSDIVkS2Ho8HqOCuu1zcc48M7Jl0nf32m8sTT1xBfb3c8ePixRc91NfLmKbE+PE6Y8fqjBun\nMXasxujRYfr31zHNTjIWAYEkSTFknCoyVlU1SsSKosT8XRFF9BYUSbcIIDnZmqZJW1sbkUgEj8eD\nrldw660uHnxQ4ZhjDF56qZULL3yG7dsnJ11zwACTgw7SOegg3bYd+OYbifp6mbVrZRoaXPzjHx4a\nGspRVZPx441oZDxqVJBx43QqK9tjyNge3drJOBwOR/ddID4qLpJxET2NIul+x9EV2Xq9XgKBEm6/\n3cUjjyjMmGHw9tthRo2C9naDqio3snwNX39dzY4dYxkz5hkAqqo8SbcnSbD77ia7765z6KGxZLx1\nqxSNjOvqXDz5pJt161RKS03GjTMYP15j7FidMWMijBkTwe/XuyRjwzDQdZ1wOBxDunYytuvMRTIu\notAoarrfUSQjW13XaW9vR9M0vF4vjY1e5s9X+dOfFE491eCSSzSGD+9co729HcMw8Hq9PPMMPP+8\ni4ceasY0zQ4ZIj+0t7ejKCpffeW2yRQK9fUy69bJ9OtnkfG4cZZePG6cRlVVBJ8vkYw1TUNVVVwu\nV/Tzi59UkXGRjIvIA0VNtwgLpmmiaRq6rsdotrFkW8r116s89ZTCGWfoLF8eZsiQxLViycpE05zd\nV4vsYOhQk6FDdY46SgeskjPDgC1bJBoaLCJ+910PCxf6WL9eZvfdzbgEXoSRI0283nA04u0qMo6H\nIOH4SooiGReRLYqk+x2BIFutgxlFZBsMBtF1Ha/Xy7fflvLHP7r4299k/ud/dD76KMyeyfNkCVAU\n0LTuIyBZhr33Ntl7b51jj+0kSV2HTz+VaGhQWLtW5vXXPdxzj4+NG2UGDzYYP96IqaQYOTKMy2V0\nrCnHVEQIYhWVHEKmEDcskbgrknER2aBIurs44skWiMoIQhr4+usybrlF5Z//lDn7bJ26ujADB2a3\nHVW1CE9ss6egKFBVZVJVpfGjH3W+3tISZMsWFxs2WBUUS5Z4ufPOErZskRk61IjKFCIy3nvvEIpi\nxNQYix8gKl/YyVhA/E2RjItIhiLp7qIQZNvW1hbVWDVNIxgMYhgGPp+PzZs9zJ2r8sorMueeq7N6\ndZj+/TPfhogCwSJdTaPXkorLBWPHGkyapHHSSZ2vh8OwYYNVSVFfL7N4sZf6ej+ffy6x996iksKS\nKcaOjTBsWAhZ7uzISyZVxEfGAkUyLgKKpLvLIT6yjb/4vV4v69dbZPvWWzK/+Y3OnXeGqajIfZtW\n55hBEim018PthgkTDCZMMGJeDwZh3To5msB75hkf9fV+vvpKYuRInTFjNCZONKOVFEOHhpCk5JFx\nV2Ss6zoulyupSVCRjHc9FEl3F4G4mO0ygqZphEIhAPx+P2vXupkzR2XpUpkLLtC5994wZWXObF+W\ncTyR1pPweqGmxqCmJpaMAwFYs8Zg7VqJjRu9PPGEi/p6mW+/lRg92uhI4HVqxoMHh4BYMv7DH+5m\n06bOLyuVSVB8aVu8xFFE30SRdPs4RKuuPeMeiUQIBoMAuFwuVq5UmD+/hJUrZS66SOfhh8P4/flv\nO15e6IuRbrbw+2HqVJ2aGh2vtzMKbWmBhgaZhgaZtWtV3nnHTUODTHOzxJgxnWQ8dqzGmjU+Vq68\nPMnqiSZB8TdS6CRju0Qh6o+L6P0okm4fRSqybW9vR5ZlfD4fK1a4uekmhbVrJS691OCJJzR8vsLs\nj6Xpfjcu+mSJwrIymDbNYNo0A+gkycZGaGhQOmQKlTfecLNq1W+SrhsKlRIMhjDN1DKFQDwZ2/Vl\nQcjJzIWK6HkUSbePwTCMGHtFgHA4TDAYRJZl/H4/S5e6uOkmF59+KnHRRUH+9Kc2BgwoLeh+iUjX\nHv3uysiUyCorYfp0nenTrZvjt99KHHhgHV9+eWDCe2trL2D8+BLGj9cZP17vkCgsX4oBAzpbnNM5\ntmmaRiAQwOPxRI9FMiIuknHPoUi6fQDJvGyhk2wVRaGkxM/bb7u5+WaVbdvgsst0zjjDwDQ1QqHC\nk6AsO98csSuhtRXuucfNffe5cLuVpO/Zb7+b+fOfO02CGhpcLFoU60thr6QYMyZCRUVs951APKnG\ndx+K98QbBRXJuPAokm4vRiqyDYVCBINBVFXF7y/l9dctGaGpCa64QucnPzEQbohpLG/zRrKSsSJi\nEQ7Do4+6uO02NwcfrPPGG2389rcvsG3b9IT3pvOl2Lat0yRo1SoXzzzjpaFBpqRE+FLo0ai4qkoH\nkpsEpSJjO4r2mYVFkXR7IeK9bAViybaMJUvczJmjEA5bZHvyyQZKkiCqOx73XS7pO5FIyxSGAc8+\nq3LjjR5Gjzb4+9/bo5UQVVVuYCZ1db9mxIhX8fs3oShKx+uJkCQYNMhk0CCdww+PJePPP5c6omKZ\nFSvc/PnPHj75pIJ+/Yhp+LAIObkvRTJSFVM+RFWMy+UqkrFDKBre9CKkMg4PhUKEQiFcLhcej4/n\nn3cxZ46CqsKVV+r86EcGqaqIRHKtvLzc8f0Va5eWltLQoHPqqSWsWNFEJBLB50DGTkgnwqQmH7S3\nt8cY3uQDYSGZzNTHNOHVVxVmz/bg88Hs2aEYa0s7fvCDEm67rZ1x41ooLXVGc7fKBCN8801JjEFQ\nQ4NlEjRwYKwvxdixEUaNiuD1GknJWDxpieMpnr7sKJJxUhQNb3ozUtkrBoPBKNmWlJTz3HMu5s5V\nKC+H667TOeYYg0zO60JFuvaCf9B7vbxQaBJ4/32Za6/18O23EtdeG+b447W0xycSAbUAV6Asw4gR\nJiNGpPalqK+XeeMND/fea/lSDBpkRo3lBRmPHBnB5bL+XlTFdBUZx+5HkYyToUi6PQgRRUQikZiu\nJUG2brcbn6+cZ56xyHaPPeC22zR++EMzI7KFwhKNINyWlhYMQyESMaP1waFQKOUF2tcRfxNbu1bm\nuuvcrFqlcNVVIU47TUsq88QjErHak53et1TfdSpfCk2DTZs6W6FfecXDvHk+Pv1UZsgQg7FjI0yc\niM2XIoKqJo+Mk5GxfcqHiJQ9Hs93loyLpNsDsEe24XCYUChEaWkpbW1t0fljPl8FTzyhctttKiNG\nmNx7r8Yhh2ROtoWEkDwEwZaVlVFaamCaEh6PJ3qRiXbXdBdnugutN5efSZLEZ59J3HSTh3/9S+Gi\ni8I89lgQrzfzNSIRCVVNTZLdBVWFMWMMxowxEnwp6ut16utlNmzwsHixh/r6Ev77X+FLYcR03w0f\nHo76UqQ63rquR2/IyUYufRci4yLpdiOSyQhgZZCbmprweDx4PBX8+c8W2Y4fb/LIIxG+//3cicdJ\n4hJReDAY7JA8SmzDIw00rbNUye12x/ydYRjRH5GgSUXGvb3Ndft2iXnzSnjmGS+//nWYlSuDOXlX\nWJGuszeVdJFutnC7Yfx4q5PO4+lc0+5L0dAg87e/eVm71s+2bRKjRhk2mSLCmDEaQ4eGo74Udkkq\n3peiq/l38dabfZWMi6TbDehqJA6Ay1XBww+7uPNOhSlTDJ56KsK0ab0jyosn2/LychRFifrKgjAx\nT34R2D0E4te1k3E4HI4mEEUSR0RHveEia2mBu+92c//9fk45JcTy5QF23z33Y1QIecFpJCPxVL4U\nbW3wySedEz6eeMJFQ4PM9u0SVVVWK7RlEBRm/HiDvfZK9KVIZhKUav5dfI1xX5l/VyTdAiLZlIb4\n+WOa5uXuuw0eesjLAQcYPPdchClTnCPbfCLdVGSbDLJsZl0yloyMxUUmSNg0TUKhUAwZx/sNFPoi\nC4XgkUdc3H67mx/8QOfVVxvZe28zJprPBX2BdLNBSQlMnWowdWpsK7Tdl2LNGoVHHy3hk09cNDVZ\nvhSixlhoxoMGpW+FvuCCeWzY0FmAbjcM+tWvfsCGDRs4++yzu/8LyBBF0i0Akk1piB+Jo2l+5s9X\nuftuhQMPDPHiixEmTeqdkW1ZWRlqF2l2p+p0BYnKsoyu61Gpwk7Gdj08V704E+g6PPOMyk03eRg7\n1uAf/2inutogFDJIUxGUMTRNwuVyVtN1Ul5waj27L0UkEolOKmlsFJGxwtq1Km++ac3Ca2+XGDtW\nZ9w4a8qHpRtHGDjQIuN164IsXXpTwnYkaSZffPEF3377bV77W2gUSddBpBqJYyfbcLiUW29VeeAB\nhaOPNvjXv0LsuWcj/fr1K8g+ZRPpiqhS1LR2RbapOtIKkfyyk7F9nzLVi5PVl6aCacKSJQrXXefB\n74f77w9y4IHOd36Ew6CqveNGmw6FIvHKSth/f4P994+VKb79NtYkaMkSi4x1XWLcOJ1PPz0p2dKs\nWrWKBx54h5KSEgYPHszEiROZOHFixk8kZ599Ni+88AJ77LEHdXV1Sd9zwQUX8PLLL+P3+3nssceY\nMmVKFp/eQpF0HUAyshVTGsRdPRgs5aabVB5+WOGEEzrHmJsm7NxZ+AsvXcSSLdkmQ09NjuhKL9Z1\nPUrIoVAo6WBKu168bJnCtde6aWyUuPbaEMceqydUjAhCzxe7mrzgFAYMgAMP1BNudN98Y3Xf/e53\nySPZqqoqpkzR2LZtG//85z+ZM2cOjz/+OFOnTs1ou7/85S85//zzOeuss5L+/uWXX2bjxo2sX7+e\n999/n/POO49ly5Zl9+Eokm5eSGYcHj9/rLW1lLlzVR57TOGUUwzeey/MiBGJazn9WCiQbs1syNY0\nTa658Rquv/r6pGvKMhiGRG+p8IonY/EZFUWJkrCu69HIuKHBxZw5Zaxdq3LllUFOO01DVQunF5um\nVTLmclnk69y6ztwQ7Ov1Frli4ECTDz+EbdumJf29z+ejpETnV7/6FUcffXTW6x900EFs2bIl5e8X\nL14cJeT999+fpqYmvvrqK/bYY4+sttO7a3N6KcRjbCgUihKupmm0trZGbfVaWyu4+mo/++zjIRSC\n5cvD3H23lkC4PZFpFZptU5PVsltWVtZldPuPF//BA28/wKKXFiX9vSRZFQy92X/BLk+43W68Xi/f\nfOPnD38YwM9+1p9DD9VYunQnp54aIBxuJxAI0NbWRjAYJBwOR9uznZBPNM36viSp5+t0+wLWr5c4\n5RQfV13lZeTIF1O+r6WlhcrKyoLswxdffMHQoUOj/7/XXnvxxRdfZL1OMdLNAsmMwzVNo729HbDm\nj23d6uaPf3Tx7LMyZ52ls3JlmEGD0q8rtNFCXXx27VU0NSiKQmlpaUYygmmazHtyHi2HtXDnX+7k\npONOiqm5FOhLTmPffCNx661unn7axTnnhPnoowCWPUWnn0I6vVi8lmvXXaGkhd4UmaZaL5tIvLkZ\nbr3Vw+OPq/zhD2GeeirCxRdvoV+/mXz00W8ZPfo5Skq+QJZlqqrcNDc3U5HPwL9uQJF0M0BXZOvz\n+fjvf93ceqvK88/L/OpX2Y0xL3TnlZARQqFQVmQr8I8X/8HqitUgwery1Sx6aREnH39ywvsE6WbS\nAttTaG62am0feMDNT38aYcWKAAMHJv/uU+nFwodAJEoFGaerN43Hd1XPzZTEDQOeekpl9mwPP/yh\nzvvvt7HHHtZxWrDgIgAmTfLz2GO/YNCgdkpKSgD4+c9/XrCk9F577cV///vf6P9//vnn7LXXXlmv\nUyTdFBDZ7vb29pjyI/v8MZ/Px6efurnlFpUlS2TOOUdn1aowAwb05J53QhSVg7Xffr8/a5ctEeW2\nVbcB0Da8LRrtxkNR6OhK6yXCrg2hEDz8sId587wcfrjOv/8dYMSI3PZTkKv9u7SXtMXrxYK87UQc\niciOd6MVAoV8AkuFDz+UufRSL4YBf/lLe8cIpEQ0N0uUlRkx+9fc3JyXvJCuymXGjBncc889/Oxn\nP2PZsmVUVlZmredCkXQTEG8cLh5X4uePrV/vZu5clTfesMaYr1kTJtdj7XSkK8jWHpH5/f6UjQ3p\nYI9yrZ1NjHY7u9LANHtXmkDX4emnVW68cQDjx+ssWtTOpEnJL+J8YC9psyOVRNHYKKGqJdGboqZp\njtQX9wRJZoN0+/f11xKzZ7t59VWVWbNCnH66ltKy1DStpovS0ljSjUQiOdt3nnHGGbz11lt8++23\nDBs2jNmzZ0dbks855xyOO+44XnrpJaqqqvD7/Tz66KM5badIuh1IZRwOljgvy9b8sTVrXMydq/Lu\nu9YY83vuyX+MuVOkG0+2IrJtamrKef33PnyPfSL7IG3sPLFN0+TdFe8mSAyqao3sSWIz2+0wTXj5\nZcvXtrwc7r67mYMPJutSuORrZ05sqSQKl8tqKBFNIKJpAEiIinuyBbo7SDwchgcftKZrnHmmxooV\ngS69LAIB6zxzuTqnUItzPNf9ffLJJ7t8z913353T2nZ850k3mXE4dM4fA0tGWL3ay803K3z4ocyF\nF+osXOjMGHMnkIpsncBt196W8Xt7SyJt6VKr1ra5WWLWrBDHHKMTDEaA3iOiWt1oRMnY6/V2KVFk\nqhc7hULkGeJJ/PXXFS6/3MPQoSavvtrOmDGZPYVY0oKZ9KbQmyN9+A6TbiqyFe2vqqpSWlrKW2+F\nuOuuEtasUbj4Yo3HH3d+jHmukW4yslVVNelJ2B0WiULT7SmsXi0ze7aH+nqZq64K8bOfZeZr2xOI\nRCTc7thjkk6iiCfjVC3Q8U9pTsDp6gWATZskrrrKQ329wpw5QY45JrEJJR2amyXKy2NJt7fagMbj\nO0e6qewV7WRbVlbGe++5uPlmlQ0bvFxySYRnn9UL9ticLSlmSrbdAXu5WyEi3Uy+l82bJW680cMb\nbyhcfHGYJ56I9AqJIx1E9UImj+/Z6MWQfMqDMAfqaQQCErff7uXRR12cf34kaw9igaYmiJ9AFQwG\n8eayWDfjO0O6qci2vb09OhKnrKycf/9b5eabVb78UuKyyzRmzGiitNSTt6OUExAJPlGqVlJSgsvl\nyuii7a5I1zA6o458L/Ku9vvrr61a22eecXHeeWHuuCOYt77eXXCiZCyZXhwIBKLEY++YzEWicFLP\nNU149lmFa64ZyMEH67z3XhuDB+d+TtojXXEzampq6vU1uvAdIN1Myfb1113cdJPCzp3WZN2f/tQa\nY97SUvjHlq7IJZ5sfT5fRmTb3VBVE10v/D41N8OCBW4efNDNaaelr7XtrShkc4QgUvtQz2z0Yqej\n4tpamcsu8xAISNx3304OPzz/x5CWFomKilh5oS80RsAuTLpdka3b7aasrJyXX7Ym6waDFtn++Mex\nY8y7g9hSka5TZFvoSFeMHJJlH+3t1iOu6NZy8vsLBmHhQhd33unmiCN03n47wPDh3U+2TnyXlu9C\n9+17JnpxvGWmOG/sJkHZlLRt3y5x/fVuXnxRZebMMGeeGSIc1rB3/eWKZJpuY2NjwVqAncQuR7qp\njMPb29uj88fKyip4/nmVOXMUJMkaYz5jRvIx5t31aB7/GXp7ZCsuRvFfl8uFqkIkYn1XYt/jR6zk\nQsS6Dn/9q+VrO2mSwfPPtzNxYnYJI6ePYb7HIhtNN1Pk8hnTWWbaCTiVZaY4tvbPoGnWzXHuXDc/\n+YnG8uUB+vWzusycQnMzCVJSMdLtZiSzV7STrcfjobS0guees8jW74dZs3SOPTb9GPPuIF2xjUKR\nrZOfIX4fJUmipKQEwzBQVQlFcQNB/H5/l4+z8fOu4j+nVWvr5qabSujXz+Thh4NMn96LHXW6gGma\nzJo7i1mXzyrY+HVw5unMTsYeT6IfhbDMjNeL333Xw9VX+9l9d5MXX2xjwgQz5m+dusE0NSVGukVN\nt5uQjGwNw4iOxPF4PPj9FTz9tMottyjsthvccovGEUdkNlm3uyJdXddpbm4GemdkC0TJ1jTN6D42\nNzdHL1DRHCGQbMhkOhMZe/S0dKmL2bPLCQQkrrsuxNFHZ1dSlAw9/X0ufnkxC/+zkH1q9kE1T6EX\n5GazRrLknWmabN4MM2d6qa1VmDWrlWOPDWKaBoGAlHAeOEG+zc0SI0YYCaRblBcKiK7I1uv1oqol\nPPmkyi23qAwbZrJggcahh2Y3xlysW8jPEAqFME2TkpIS3G53QcghnxuHpmm0tbVhGAY+ny/lPqoq\nXSbSUnVoCQ2+rk7i+ut9rFunctllLZx0Ujtut0I4HPso29MEmi1M0+Sup++i5bAW5j89n/NP+nGv\nngSc6XptbXDnnR4efNDNb34TZuHCNnw+GShJuMGK6DgQCOQ9YklourGvNTN8+PBcP263oc+RriCq\n1tZWLrpoAZs2adGDK6KlUaNK+d73Lua221TGjjV5+OEIBx6Yu7mJ05Gu+AzC7NzlcmEYRsxjnJPI\n9UIU+yimX3g8nrRrieYIe+1upti8WeaGG3z8+98Kl1wS5q9/bQM0TFNFVdUYeSITXbG3YfHLi1lb\nuRYkWFuxlvdXrERV948peepLME1YtEhl5kwP06bp/Oc/AYYOTWz2sN9gRauzx+NJ+7STSQ6gpYUo\n6dqrFwrlMOYk+hzp2usO168P8d57Nya8Z/nyJrZvl/nLXyLst19+hOk06YpHdHvUKAzRC4lsPoOY\nfhGJRPD5fJSWlmZEaIpC1ibmX38tMXeum7/9zcX/+39h5s3rrLUNh61tqqqaci5aujrU3jKSW0S5\nbTWdTm0vvfAvpo/er0f3qyukunGuWWOVgO3YIfHAA0EOOii7g57qaSc+Kk7XAm1puokOY31B0+1z\nt1hhECJKwZJh4sQnee45LW/CBedINxKJ0NzcHJ0sUVFRERM5FlI3zpR0dF0nEAjQ3NyMoihUVlbi\n9XrT/r39+8mmI62pCa6/3s20aX5cLvjwwwBXXJGZeZC9BtXr9VJSUoLf74/RwkWULqY/iIgqmaFR\ntsg2irdHudYHgC893/Dlts/y2o989ytb7NgBF1/s4YQTfJx0ksY777RlRbhd7V/8VI9kx1XXdUKh\nEI2NJm53ENM02bFjB4sXL6a1tZXy+Da1DLFkyRLGjRvHmDFjmDt3bsLvm5ubmTFjBlOmTKG6uprH\nHnssp+1AH4x0w+EwgUAgbQH3Z58dwk03KUyebFJTYzBkCHklYfIhxGSRbU8YdKT7DGI8vKjyqKio\nyOmRNz6Rlgyi1vaOO9wcdZTOO+8EGDbMmZtjulbZYDAYLW/rbgOZZR8tY2p4KqzvfG1rZCTb27Zi\nmrmRRHdAnDO6Do895uKmm9yceKJVApaLZ3QuN4VUx7W1VaF/fxVJ0ti5cyd/+tOf+Oijj3j++eeZ\nMGEC+++/PwsWLMhoG4Zh8Lvf/Y7XX3+dwYMHM23aNE488UTGjRsXfc8999zDxIkTef7559m+fTtj\nx47l5z//eU6udX2OdF0uFxUVFWkfxwcOXENb21geeEChrk4lHIaaGpPJk42O/5qMHWtm1BGU60WY\nCdnat9ETka4gI9EskivZCljyQvJtaVpnre3kyTovvNDOhAmFSVDaIaJiSZJwu90oipK2OyvfBE8y\nzLl6TsJr993nYuNGGWjs0TrdrrB0qYurry6hvNxk0aJ2qqsLf8wyQXMzVFTQkcMZxXPPPcdxxx3H\nokWL+OSTT9i6dWvGa33wwQeMHj06moQ77bTTWLx4cQzpSpJES0sLYFm9DhgwIGeb0D5HuplcBAMH\nruaGG04ErEefbdtg1SqJ2lqZJUtkbrlF4rPPJMaNM6mpET8WIcdLQtkSYrbJJ4HubMAwTTNq8ON2\nuykvL8/J4Bxiv59kmq5pwosvqsye7WbAAJNHH21n//179sLtKiq2J3iSedwK0s4HmkZBSsacIvDP\nP5e4+uoyPvhA5cYbw5x8spZ3yZ5TSUPTTD41wjRN+vfvz/e///2s1osfODlkyBA++OCDmPf87ne/\nY8aMGQwePJjW1laefvrpnPe/z5GugCRJjBrlQlH+iKZ5eP/9SzjwQCupNnp0bBXAnnvCnnuaHHlk\nJyMEArBmjURtrcSqVTLPPquyapXEwIHERMTV1SZlZV1fYPFkm2nySXyWQsLefCFGrrtcrrzINtk2\nhKYrtvfOOwrXXushGIQbbghx1FH519oWEqlqUOOjYiA6xilZpj2T4xkOd28bcKYIBuGuu9zcc4+b\nX/6yjfnzA1RW9h4fYrBGL0kSeL2JBuaFwiuvvMLUqVN544032LhxI0ceeSR1dXWUlpZmvVafI11x\nQkuSxO2THBLwAAAgAElEQVS3/5by8nIMA0pL3bz88tUZd/n4/bDffmZHss2KvHTd8vmsrbV+HnpI\nprZWJRjcncmTzQ6N2PrvuHGWPJEP2do/UyFPGlED29TUhKIoXY5bzxWCdFetUpkzx8/GjQpXXx3i\nJz9JPXaltyNZVBzv5JVL2ZPoSHPyuOeTSBNPJFdd5aGmxpoht+ee7Y7dlPPdPzuS+S4I5LL+Xnvt\nxWefdSY1kw2cfPTRR7nyyisBGDVqFHvvvTcNDQ3su+++WW+vz5EudA4GFFloWba8NZuboX//3NdV\nFBg92mT0aJNTT+18/ZNPGvnss37U1cm8+qrMbbdJbNkiUVWlM3GizuTJfr73PZmaGnLyBi0U6YrE\nkWjZLRTZCnz2mcSvf+1j993dXHxxiLPPDvbJrqtMYG9ltkPc4NKVPSmKQjjsinr+9nRJW0ODzOWX\ne9i6VWL+/CCHHSaieeebLZxAU5Plu2AnXaHH54Jp06axYcMGtmzZwqBBg/jrX//KU089FfOe4cOH\n89prr3HggQfy1VdfsW7dOkaOHJnT9vok6UIiUVVUQGNjfqSbCrvvbjJ6tM6RR3Y2NTQ3a2zeXEp9\nvYe6OpnFiyVWr5YYMCBWnqipMRg2LLPqCacigXh/BI/Hg67rBSFcSZLYtg1uucXD+++rDB9u8MYb\n39K/vzvvKKmQ3YD5IN1xsmQWNeH9djK2jo0Ll8uKksPhcFTW6M4mj8ZGmDPHw9NPq1x6aZhf/zpS\n8LHwTkW6FRWJ3WhlOZopK4rC3XffzVFHHYVhGJx99tmMHz+eBx54AEmyhlLOnDmT//3f/6WmpgaA\nW265hf45ks0uRLomzc0S4HzEKOo+Q6EQmqbh8/kYPLiUvfaSOPBAAyFPGEasPPHwwzJ1dSptbYnV\nE+PGmdEo0MmLLBKJ0NZmFeGL+kZ7u7STaGqCOXN8PPaYlzPP1PjRjyIceaSO39/7tMqeRPLEnRu/\n30CS2qJPbfk2eWR60zYMeOIJF9df7+bYYzWWL29jt92SW4t2d1txJkhmYN7c3JxzjS7AMcccwyef\nfBLz2rnnnhv996BBg3jllVdyXt+OPkm68RlLSZIoL7fu3E5DNGEIHS+dZivLUFVlUlVlcsopna9/\n/TXU1UnU1cm89prMHXdIbN4sMWaMlaibPNlk5EgP06ebDBhQ+BK1fNHeDvffr3DHHQpHHhninXcC\nDB8uceGF7midbnfbYXYF0zRZ/PJiPqj9IGkJV3fDbmLucrmi5BGfuLPbKzoxguf992Uuu8yLywXP\nPNPO1Km970miKyTTdPuK2Q30UdKFzuhBfPGVlc5GuvZWWAC/35/zyJ7dd4cjjjA54ojO6on2dqt6\nQpDxM8+UUl/von//RHli+PDU8oQ9kZeu+cIJEtQ0ePxxmRtuUPne9wxeeSXC8OFtHTKCEuO90Fsg\nyHbek/No6N/A1MjUnt4lIHXJWKblbMmaPMT/J4sot26VuPZaD2+/rTB7doif/rTrErDeGulavgsk\nkG5faAGGPkq69goGQSZORbp2svV6vfj9/mhRtJPw+WDffU323deqnmhsbMTvL+OzzxRqa2VqayUe\nfdSSJwIBOiLiTjIeM0ZD17P3R8gFpgmLF8tce63CwIHwl79EmD7d+t4Dgc73WeN6CrILWUOQ7V1P\n38XayrW0TW2z2nDXd/mn3QKrZCzz92dSziaqJzRNixJxJCLz4IM+Fizw8j//E2H58p6ZI+fkk09T\nk5RQxlkk3W6CnXQ7I93ckIxs7eReaFgRjsmoUTBqlMGPf9z5u2++6ZQnXn9d6pAnfFRVeZg8mWhE\nXFNjJk0k5hPpvvWWxDXXqIRCcOutGkcemdwa0yKF7A1vCoVZc2ex8D8LaTmspdPzoBfBKhnL34zJ\nHhWLyE+41i1ZonDVVSWMHq3xz39uZ++9dRRFIRTq/sGU9n3OF8nkhebm5qK80B1wItKNJ9uSkpKE\nR7tC19F2hYED4bDDdKZPb436I4CXhgaF2lqLjBctspo7KisT5Qlbs00CfvOb21i/PrGlul+/4bS1\n/ZKNGyVmzdL4yU+SjzOCTu8G8BEKdUZgPYlZl89in5p9mP/0fNZWrKVteJsj5OvU5yrUuB5Zltmw\nQeaKK0r49FOZW28NctRROqbpTdn6nKrJw0k4+TmbmyUGDTISSHfIkCGOrF9o9EnSTSYvVFbCl19m\nvoadbLsyeekO0k21jXT+CPvsY7LPPp3NHYYBn34KdXWWPPGnP1nNHa2tMH682lFLbJHx+PEmHg+s\nXx/inXeuS9iu293Mrbfq/PKXRspaW5HoER6pLpeEplkXdigUihlo2N1Wi5IkceJxJzLj2Bk8//Lz\n3PnknTT0b3B0/XwQiTjfBtzSIjFvno+//MXDxReHeeqpSEyFTKatz0KmAAiFQgljlXoazc0wZkyi\nvDBp0qQe2qPs0CdJV8DeIFFebrJ2bdfF0bquEwwGs3LU6gnSzcUfQZaJyhMnn9z5+tdfGyxb1s6m\nTeW89ZbMXXdJbNokMWqUyddf/zjpWvvuO59zz70s6e/sNwJZlvF6vbjdbtxuBdO06h5VVUVRlLRZ\n+O64mAX5HnHoEbz61qu8//H7BdlOtnByGrBhwFNPqcyeXcJhh2m8/34be+yR2drJtGJrTWsKi7BS\nzXa+XTycjnSTGZgXNd0CIlWk2zFiLClyIVv79rrrcbkQ/ggDB0ocdFCIGTM6BddgEOrrJc4661O+\n/npKwt/8978Hs2iRTE2Nwd57W9UT8TeCiooKgsFg9Hgoikko1HkBppuRput6l4+4Tn7nkiQx45gZ\nnHz8yV2/uRvg1GDKDz+UufRSL6YJjzzSxPTpic0ZuUKSpJiKnWRNHsnm2xX6RipI175+UdPtJsRq\nuiaNjYkH2Qmv2O7qjAqHw7S1tRXUH0HA64WpU0323PMj1q9PTkSPP27JE83NMGmSzvjxYaqrFfbd\nt4JJk2RkOdHEvKMvIyVSZeFTPeJKkhSNqHvTI26+0DSikW4un+frryVmz3bzr3+pXHttiNNP1wiF\nNKBwLWVdSRTJbqSFGkpZWmrEvVYk3W6BnQzjI12njLnFdgoV6Qp/hEgkgizLlJaWFoxssznhR4x4\ng7/9bTqRSIQvvgiydq2LTz7x8cEHHh5+WGLDBomRI00mTpSYNElj6lSJ5mbQtOwvqFRELCY9SJI1\nMSCfJoGeTuzFIxwmp5bbcBgefNDF7be7OfNMjRUrAuTRiJUS2ZwrXZWzCTJONZQy2yaP5mYSIt1i\nc0SBkUxesLwXJEfJ1r49py9auz+CKPNxuVwF80dIBcsG849s3HgsXu9O9tprGQCjRrloaWnBNE32\n2svHiBEujj8ewGo5C4UseWLFCo26OplXXnHx7rvWRffJJ+VUVxtMmQLV1TojRphZu4zZo6r4R9yu\nmgRSTQ3uTRGypelm9zevvaZwxRUehg41eeWVdsaMiY32Cj2uJxvYj5+qqkmHUqabb5fuqSaZl24o\nFIo6v/V29EnSFbCTYVmZTlOTSlNTkyNTEOLhFOmK4vV4f4T29vaCRmOpOpXuvfcSAK66SmG33eD3\nv/8BbW1t0QskVTuxxwNTppiMHRvm9NMNvF4vCxZIvPmmi9NOC7J2rZunnrKsAhsbJSZN0qmuNqip\nMaiu1hk/3sjZka2rqCqZzaLQIvOtnnCK2DQt8zrdTZskrrrKQ329wpw5QY45pvC+xIXqRrMfP1fH\nXSeZZ3GqpxpZlpOSLvSum2o69EnStUe6IssKIZqa9qC8vAJFcda81amDmc4foadrgRXFpLXVGp6Z\njS+w/T0uFwwZYnD88WFmzNCjF9WOHbB6tUJdncy77yrcf781qmbECKODiDsJecCA7L+D+KhKwJ70\nAUszD4VCSZN2Tt6gM4ElL6QnttZWuOMON4884uKCCyL86U/BqB3kroRsytmCQZ1wuByXK4yuw+bN\nm9mxY0dex2/JkiVceOGFUYexyy+/POE9b731FhdddBGRSISBAwfy5ptv5ry9Pkm60JnlF5aFu+9e\ngapCKCRTUuLstvIlxEz8EaDwE4HT1QGbpkokoub1hCAGU8Zvq39/OOQQnUMO0QHLyyIUgk8+kVm1\nSqauTmHJEpVVqxT8fpPqaisanjgRxo83GTeOnEzQJakzky/apcWNOn4kT/zjbaFriu2GN/EwTXj2\nWZU//tHDwQfrvPdeG4MHd31uON1o4SRy2bdkTzVtbVBWZqKqVjniypUrufnmm9m4cSPV1dXU1NRw\n6qmn8uMfJy+FjEcmQymbmpr47W9/y6uvvspee+3F9u3bs/oc8eiTpGuaZnRMOFhmNGDpuk1N9BrS\ntTdgdOWP0N2PRvHlX2VlXlpbJWQ59z5eWc48kebx0NG6bHDmmVrHPllG6KtWWVHxs896WLWqhMZG\nmYkTO6PhSZN0Jkww8Pmy38eu5Il0zl5OTlFIpenW1spceqmHYFDisceCTJ/eM33Vpmnywisv8OGa\nDx1xZbPbMOYDq1ys84b64x//mOOPP55TTz2VefPmUVdXF+WDTJDJUMonn3ySU045JTpNYrfddsvr\nM/RJ0pUkiYqKimjmX6CiwqSpSWLQIGfv0tmSbjofB6e2kS3E+uI7a2+3RrGIOmCPR2LnztzXBatk\nLB/vBUmC4cNNhg/X+NGPrCcE65HSF5Unli1TeOghF+vXywwfnihPJPOFzeQzdPV4a0/6ANHvL9eJ\nwfaSMYDt2yWuv97Niy+qzJwZ5he/iJAtxzsR6QqjoPlPzae+X32vcWUTsDdGCDQ1NdGvXz+mTJnC\nlCmJNefpkMlQynXr1hGJRDjssMNobW3lggsu4Be/+EXOn6FPki4Q7ZSBzpNNRLpOI1NCzKdyotCk\nK6olWltbk5amud0m4XB+F6yYkeY0+vWDgw/WOfjgTnkiHLbkibo6mVWrFF591ZInfD4zhoirq3VG\njszte02W9BE3VFVVc5qNJhAOC1c2ifvvdzF3rpuf/lRj+fIA/frltLt5IcGVbYqzrmyFNDBvamrK\ny8C8K2iaxsqVK3njjTcIBAIccMABHHDAAVRVVeW0Xp8lXUj01C0vLwzpCqQ6cextsfmUqV0952p+\ncMAPOPn4kx2VGwQxhEIhSkpKcLlcCeu7XDhCut3lMuZ200GqBqKMzTThv/+1yxOWLvrttxLjx3ui\ng0WFPJGLDCXOOVecNmDXie0VFKlqUiMRiaVLVebOHcCgQfDSS+2MH99zhuK93ZVNQMgLThmYZzKU\ncsiQIey22254vV68Xi+HHHIItbW13z3STd4KbMkLTo/siSd3gWRtsfk0YKz6chVPvPAEd/7lTi46\n86K8ydeewJNlmZKSkpRG7Bbp5rbf4vuXZbMgkW7m+wLDhpkMG6Z11BRbaGyE5cvDrFtXwgcfqDz8\nsIt162SGDTNiythqagwGDkx/7qS68aZreY6vKf78c5WdO8u4+GIft97axCmnyMiyRD5sl+9TUqFc\n2QSci3SJRroC+XjpZjKU8sQTT+T8889H13VCoRDvv/8+f/jDHzJaX5KkfYGHgWlY7YLv91nSFYht\nBS7MyJ747djJ1il/BHFCto1oY7m5nP974f9yJt9kCbyujNjd7txI177/wsS8p8vf4lFZCd//foQf\n/jCMLFt3hXAY1q3rlCdee81NXZ2C15soT4walX1zByQm7draYP58Nw89ZEXJy5btoKwsQjAoOeZf\nkCuxSVKsK9u8p+ZR368+p7WSwanzIZXZTa6RbiZDKceNG8fRRx9NTU0NiqJwzjnnMGHChIzWN01z\nhSRJi4EbAR/w+C5FuvkamXe1nc5JrpamVzB/BKmTfM+961xWfrySG2be0OWfpZM5uroY3W6rjCkf\nWJpuL342tcHthkmTDCZNipUnPv9cipax/f3vKrNmedi+XWLCBFHGpjFunM4++ySvkjn//DvZsCH2\n7mWa4HJNZtOmU5g2Teedd9qorvbTr5+CaVo129kYARWylE2Q71GHHcXLr7/MB7UfdP1HWaydL1LN\n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\ngg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10fb7a790>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# This can similarly be extended to 3D (this is a simple 2-cell mesh)\n",
    "hx = np.r_[2.,  2.]  # cell widths in the x-direction\n",
    "hy = np.r_[2.]  # cell widths in the y-direction \n",
    "hz = np.r_[1.]  # cell widths in the z-direction \n",
    "mesh3D = Mesh.TensorMesh([hx,hy,hz])  # construct a simple SimPEG mesh\n",
    "mesh3D.plotGrid(nodes=True, faces=True, centers=True)  # plot it!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Counting things on the Mesh\n",
    "\n",
    "Once we have defined the vectors necessary for construsting the mesh, it is there are a number of properties that are often useful, including keeping track of the\n",
    "- number of cells: **`mesh.nC`**\n",
    "- number of cells in each dimension: **`mesh.vnC`**\n",
    "- number of faces: **`mesh.nF`**\n",
    "- number of x-faces: **`mesh.nFx`** (and in each dimension **`mesh.vnFx`** ...)\n",
    "and the list goes on. Check out [SimPEG's mesh documentation](http://docs.simpeg.xyz/content/api_core/api_FiniteVolume.html) for more. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nRK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1102364d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Construct a simple 2D, uniform mesh on a unit square\n",
    "mesh = Mesh.TensorMesh([10, 8])\n",
    "mesh.plotGrid()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'The mesh has 80 cells and 178 faces'"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\"The mesh has {nC} cells and {nF} faces\".format(nC=mesh.nC, nF=mesh.nF)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'In the x dimension we have 10 cells. This is because our mesh is 10 x 8.'"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Sometimes you need properties in each dimension\n",
    "(\"In the x dimension we have {vnCx} cells. This is because our mesh is {vnCx} x {vnCy}.\").format(\n",
    "    vnCx=mesh.vnC[0],\n",
    "    vnCy=mesh.vnC[1]\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Faces are vectors so the number of faces pointing in the x direction is 88 = 11 x 8 In the y direction we have 90 = 10 x 9 faces'"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Similarly, we need to keep track of the faces, we have face grids in both the x, and y \n",
    "# directions. \n",
    "\n",
    "(\"Faces are vectors so the number of faces pointing in the x direction is {nFx} = {vnFx0} x {vnFx1} \"\n",
    "\"In the y direction we have {nFy} = {vnFy0} x {vnFy1} faces\").format(\n",
    "    nFx=mesh.nFx,\n",
    "    vnFx0=mesh.vnFx[0],\n",
    "    vnFx1=mesh.vnFx[1],\n",
    "    nFy=mesh.nFy,\n",
    "    vnFy0=mesh.vnFy[0],\n",
    "    vnFy1=mesh.vnFy[1]  \n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Simple properties of the mesh\n",
    "\n",
    "There are a few things that we will need to know about the mesh and each of it's cells, including the  \n",
    "- cell volume: **`mesh.vol`**,\n",
    "- face area: **`mesh.area`**.\n",
    "\n",
    "For consistency between 2D and 3D we refer to faces having area and cells having volume, regardless of their dimensionality."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nXpMoH6MAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10fb86150>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# On a uniform mesh, not suprisingly, the cell volumes are all the same\n",
    "plt.colorbar(mesh.plotImage(mesh.vol, grid=True)[0])\n",
    "plt.title('Cell Volumes');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The cell volume is the product of the cell widths in the x and y dimensions: 0.1 x 0.125 = 0.0125 \n"
     ]
    }
   ],
   "source": [
    "# All cell volumes are defined by the product of the cell widths \n",
    "\n",
    "assert (np.all(mesh.vol == 1./mesh.vnC[0] * 1./mesh.vnC[1]))  # all cells have the same volume on a uniform, unit cell mesh\n",
    "\n",
    "print (\"The cell volume is the product of the cell widths in the x and y dimensions: \"\n",
    "       \"{hx} x {hy} = {vol} \").format(\n",
    "            hx = 1./mesh.vnC[0], # we are using a uniform, unit square mesh\n",
    "            hy = 1./mesh.vnC[1],\n",
    "            vol = mesh.vol[0]\n",
    "       )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The area of the x-faces is 0.125 and the area of the y-faces is 0.1\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nEn1fFTKsf/QAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1106d4c10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Similarly, all x-faces should have the same area, equal to that of the length in the y-direction\n",
    "assert np.all(mesh.area[:mesh.nFx] == 1.0/mesh.nCy)  # because our domain is a unit square\n",
    "\n",
    "# and all y-faces have an \"area\" equal to the length in the x-dimension\n",
    "assert np.all(mesh.area[mesh.nFx:] == 1.0/mesh.nCx)\n",
    "\n",
    "print (\"The area of the x-faces is {xFaceArea} and the area of the y-faces is {yFaceArea}\").format(\n",
    "        xFaceArea=mesh.area[0],\n",
    "        yFaceArea=mesh.area[mesh.nFx]\n",
    "      )\n",
    "\n",
    "mesh.plotGrid(faces=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11053de10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# On a non-uniform tensor mesh, the first mesh we defined, the cell volumes vary\n",
    "\n",
    "# hx = np.r_[2., 1., 1., 2.]  # cell widths in the x-direction\n",
    "# hy = np.r_[2., 1., 1., 1., 2.]  # cell widths in the y-direction \n",
    "# mesh2D = Mesh.TensorMesh([hx,hy])  # construct a simple SimPEG mesh\n",
    "\n",
    "plt.colorbar(mesh2D.plotImage(mesh2D.vol, grid=True)[0])\n",
    "plt.title('Cell Volumes');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Grids and Putting things on a mesh\n",
    "\n",
    "When storing and working with features of the mesh such as cell volumes, face areas, in a linear algebra sense, it is useful to think of them as vectors... so the way we unwrap is super important. \n",
    "\n",
    "Most importantly we want some compatibility with <a href=\"https://en.wikipedia.org/wiki/Vectorization_(mathematics)#Compatibility_with_Kronecker_products\">**Kronecker products**</a> as we will see later! This actually leads to us thinking about unwrapping our vectors column first. This column major ordering is inspired by linear algebra conventions which are the standard in Matlab, Fortran, Julia, but sadly not Python. To make your life a bit easier, you can use our MakeVector `mkvc` function from Utils.\n",
    " "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from SimPEG.Utils import mkvc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Row major ordering (standard python)\n",
      "[[ 0  1  2  3]\n",
      " [ 4  5  6  7]\n",
      " [ 8  9 10 11]]\n",
      "\n",
      "Column major ordering (what we want!)\n",
      "[[ 0  3  6  9]\n",
      " [ 1  4  7 10]\n",
      " [ 2  5  8 11]]\n",
      "\n",
      "We get back the expected vector using mkvc: [ 0  1  2  3  4  5  6  7  8  9 10 11]\n"
     ]
    }
   ],
   "source": [
    "mesh = Mesh.TensorMesh([3,4])\n",
    "\n",
    "vec = np.arange(mesh.nC)\n",
    "\n",
    "row_major = vec.reshape(mesh.vnC, order='C')\n",
    "print('Row major ordering (standard python)')\n",
    "print(row_major)\n",
    "\n",
    "col_major = vec.reshape(mesh.vnC, order='F')\n",
    "print('\\nColumn major ordering (what we want!)')\n",
    "print(col_major)\n",
    "\n",
    "# mkvc unwraps using column major ordering, so we expect \n",
    "assert np.all(mkvc(col_major) == vec)\n",
    "\n",
    "print('\\nWe get back the expected vector using mkvc: {vec}'.format(vec=mkvc(col_major)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Grids on the Mesh\n",
    "\n",
    "When defining where things are located, we need the spatial locations of where we are discretizing different aspects of the mesh. A SimPEG Mesh has several grids. In particular, here it is handy to look at the \n",
    "- Cell centered grid: **`mesh.gridCC`**\n",
    "- x-Face grid: **`mesh.gridFx`**\n",
    "- y-Face grid: **`mesh.gridFy`**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'The cell centered grid is 12 x 2 since we have 12 cells in the mesh and it is 2 dimensions'"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# gridCC\n",
    "\"The cell centered grid is {gridCCshape0} x {gridCCshape1} since we have {nC} cells in the mesh and it is {dim} dimensions\".format(\n",
    "    gridCCshape0=mesh.gridCC.shape[0],\n",
    "    gridCCshape1=mesh.gridCC.shape[1],\n",
    "    nC=mesh.nC,\n",
    "    dim=mesh.dim\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x10fb7a650>]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n44Hxl9IAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10fb7ad10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# The first column is the x-locations, and the second the y-locations\n",
    "\n",
    "mesh.plotGrid()\n",
    "plt.plot(mesh.gridCC[:,0], mesh.gridCC[:,1],'ro')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Similarly, the x-Face grid is 16 x 2 since we have 16 x-faces in the mesh and it is 2 dimensions'"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# gridFx\n",
    "\"Similarly, the x-Face grid is {gridFxshape0} x {gridFxshape1} since we have {nFx} x-faces in the mesh and it is {dim} dimensions\".format(\n",
    "    gridFxshape0=mesh.gridFx.shape[0],\n",
    "    gridFxshape1=mesh.gridFx.shape[1],\n",
    "    nFx=mesh.nFx,\n",
    "    dim=mesh.dim\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x10fba67d0>]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x110534a90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "mesh.plotGrid()\n",
    "plt.plot(mesh.gridCC[:,0], mesh.gridCC[:,1],'ro')\n",
    "plt.plot(mesh.gridFx[:,0], mesh.gridFx[:,1],'g>')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Putting a Model on a Mesh\n",
    "\n",
    "In [index.ipynb](index.ipynb), we constructed a model of a block in a whole-space, here we revisit it having defined the elements of the mesh we are using. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x1102afa50>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nrkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10d7d8a10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "mesh = Mesh.TensorMesh([100, 80])  # setup a mesh on which to solve\n",
    "\n",
    "# model parameters\n",
    "sigma_background = 1.  # Conductivity of the background, S/m\n",
    "sigma_block = 10.  # Conductivity of the block, S/m\n",
    "\n",
    "# add a block to our model\n",
    "x_block = np.r_[0.4, 0.6]\n",
    "y_block = np.r_[0.4, 0.6]\n",
    "\n",
    "# assign them on the mesh\n",
    "sigma = sigma_background * np.ones(mesh.nC)  # create a physical property model \n",
    "\n",
    "block_indices = ((mesh.gridCC[:,0] >= x_block[0]) & # left boundary \n",
    "                 (mesh.gridCC[:,0] <= x_block[1]) & # right boudary\n",
    "                 (mesh.gridCC[:,1] >= y_block[0]) & # bottom boundary\n",
    "                 (mesh.gridCC[:,1] <= y_block[1]))  # top boundary\n",
    "\n",
    "# add the block to the physical property model\n",
    "sigma[block_indices] = sigma_block\n",
    "\n",
    "# plot it!\n",
    "plt.colorbar(mesh.plotImage(sigma)[0])\n",
    "plt.title('electrical conductivity, $\\sigma$')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Next up ...\n",
    "In the [next notebook](divergence.ipynb), we will work through defining the discrete divergence. "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
